#include #include #include using namespace std; void fixQueryString(char queryString[]); void parseQueryString(string queryString); int main() { cout << "content-Type:text/html\n\n"; cout << "
"; char* queryString = getenv("QUERY_STRING"); fixQueryString(queryString); parseQueryString(queryString); cout << ""; cout << ""; cout << "

" << queryString << "

"; cout << "

hola Maria

"; cout << "

hola Maria

"; cout << "

hola Maria

"; cout << "

hola Maria

"; cout << "
hola Maria
"; cout << "
hola Maria
"; cout << "
"; return 0; } void parseQueryString(string queryString) { queryString = queryString + "&"; while(queryString.length() > 0) { unsigned int indexOfEqual= queryString.find("="); string name = queryString.substr(0,indexOfEqual); queryString = queryString.substr(indexOfEqual +1); unsigned int indexOfAmpersand = queryString.find("&"); string value = queryString.substr(0,indexOfAmpersand); queryString = queryString.substr(indexOfAmpersand + 1); cout << "

name = '" << name << "' value = '" << value << "'

"; } } void fixQueryString(char queryString[]) { for(int i = 0; i < strlen(queryString); i++) { if( queryString[i] == '+') { queryString[i] = ' '; } if( queryString[i] == '%') { char firstHexValue = queryString[i+1]; char secondHexValue = queryString[i+2]; int asciiValue = 0; switch( firstHexValue ) { case 'F': asciiValue += 16; case 'E': asciiValue += 16; case 'D': asciiValue += 16; case 'C': asciiValue += 16; case 'B': asciiValue += 16; case 'A': asciiValue += 16; case '9': asciiValue += 16; case '8': asciiValue += 16; case '7': asciiValue += 16; case '6': asciiValue += 16; case '5': asciiValue += 16; case '4': asciiValue += 16; case '3': asciiValue += 16; case '2': asciiValue += 16; case '1': asciiValue += 16; } switch( secondHexValue ) { case 'F': asciiValue += 1; case 'E': asciiValue += 1; case 'D': asciiValue += 1; case 'C': asciiValue += 1; case 'B': asciiValue += 1; case 'A': asciiValue += 1; case '9': asciiValue += 1; case '8': asciiValue += 1; case '7': asciiValue += 1; case '6': asciiValue += 1; case '5': asciiValue += 1; case '4': asciiValue += 1; case '3': asciiValue += 1; case '2': asciiValue += 1; case '1': asciiValue += 1; } queryString[i] = (char)asciiValue; strcpy(queryString + i + 1, queryString + i + 3); } } }